<?php
namespace Reezy\OAuth\Contract;

use Reezy\OAuth\OAuthInfo;

interface OAuthInterface
{
    /**
     * 获取授权页面URL
     *
     * @param string|null $redirectUri
     * @param string|null $state
     * @param bool $isSilent
     * @return string
     */
    function getAuthUrl(string $redirectUri = null, string $state = null, bool $isSilent = false): string;

    /**
     * 通过授权码(code)获取访问令牌(access_token)
     *
     * @param string $code
     * @return OAuthInfo
     */
    function getAccessToken(string $code): OAuthInfo;

    /**
     * 通过访问令牌(access_token)获取用户信息
     *
     * @param OAuthInfo $token
     * @return OAuthInfo
     */
    function getUserInfo(OAuthInfo $token): OAuthInfo;

    /**
     * 是否支持静默授权
     *
     * @return bool
     */
    function isSupportSilentMode(): bool;

    function getName(): string;
    function getClientId(): string;
    function getCodeKey(): string;
}